package com.jqq.threaduse;

/**
 * @author 姬倩倩
 * @version 1.0
 */
public class Thread01 {
    public static void main(String[] args) throws InterruptedException {
        //创建Cat对象，可以当作线程使用
        Cat cat = new Cat();
        cat.start();
        /*
            1)
            public synchronized void start() {
                start0();
            }
            2)
            //start0()是本地方法，是JVM调用，底层是c/c++实现
            //真正实现多线程的效果，是start0()，而不是run
            private native void start0();
         */
//        cat.run();//run方法就是一个普通的方法，会先执行完run再执行下面的，就体现不了多线程
        //当main线程启动一个子线程Thread-0，主线程不会阻塞，会继续执行
        //这时，子线程和主线程是交替执行的
        System.out.println("主线程继续执行");
        for (int i = 0; i < 60; i++) {
            System.out.println("主线程 i=" + i+"线程名=" + Thread.currentThread().getName());
            Thread.sleep(1000);
        }
        //主线程结束了，如果还有其他子线程没跑完，不会造成整个应用程序的停止
    }
}

//1.当一个类继承了Thread类，该类就可以当作线程使用
//2.重写run方法，写上自己的业务代码
//3.run Thread 类 实现了Runnable 接口的run方法
class Cat extends Thread {
    int times = 0;

    @Override
    public void run() {
        while (true) {
            System.out.println("喵喵，我是一只小猫咪" + (++times) + "线程名=" + Thread.currentThread().getName());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (times == 80) {
                break;
            }
        }
    }
}